package la.foton.atividade.controller;

import java.util.Collection;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import la.foton.atividade.entity.Cliente;
import la.foton.atividade.entity.Projeto;
import la.foton.atividade.service.ClienteService;
import la.foton.atividade.service.ProjetoService;
import org.primefaces.event.RowEditEvent;

@ManagedBean(name = "projetoBean")
@RequestScoped
public class ProjetoBean extends BaseBean {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@ManagedProperty("#{projetoService}")
	private ProjetoService projetoService;

   @ManagedProperty("#{clienteService}")
   private ClienteService clienteService;
   private Projeto projeto;
	private List<Projeto> listAll;
   private List<Cliente> listAllClientes;

	public ProjetoBean() {
	}

   @PostConstruct
   private void init()
   {
      projeto = new Projeto();
   }

   public void incluir()
   {
		projetoService.create(projeto);
		atualizarListaProjetos();
		clean();
		addInfoMessage("Cliente criado com sucesso.");
	}

	public List<Projeto> getListAll() {
		if (listAll == null) {
			atualizarListaProjetos();
		}
		return listAll;
	}

   public void atualizarListaProjetos()
   {
      listAll = projetoService.getAll();
   }

   public List<Cliente> getListAllClientes()
   {
      if (listAllClientes == null)
      {
         atualizarListaClientes();
      }
      return listAllClientes;
   }

   public void atualizarListaClientes()
   {
      listAllClientes = clienteService.getAll();
   }

   public Collection<Cliente> getValuesComboBoxCliente()
   {
      return getListAllClientes();
   }



	public void clean() {
      /*
       * this.nomeCliente = ""; this.nomeProjeto = "";
       */
	}

	public void onEdit(RowEditEvent event) {
      Projeto prj = (Projeto) event.getObject();
      // Projeto prj = null;
		projetoService.update(prj);
		atualizarListaProjetos();
      addInfoMessage("Projeto" + " editado");
	}

	public void onCancel(RowEditEvent event) {
		Projeto prj = (Projeto) event.getObject();
		projetoService.deleteById(prj);
		atualizarListaProjetos();
		addInfoMessage(prj.getNome() + " excluido");
	}

	public ProjetoService getProjetoService() {
		return projetoService;
	}

	public void setProjetoService(ProjetoService projetoService) {
		this.projetoService = projetoService;
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}

   /**
    * Recupera o valor do atributo clienteService
    * 
    * @return o clienteService
    */
   public ClienteService getClienteService()
   {
      return clienteService;
   }

   /**
    * Atribui o novo valor de clienteService
    * 
    * @param clienteService clienteService que será atribuído
    */
   public void setClienteService(ClienteService clienteService)
   {
      this.clienteService = clienteService;
   }

}
